package main

import (
	"fmt"
	"unsafe"
)

func main() {
	//1、定义float类型

	var a float32 = 3.12

	fmt.Printf("值:%v--%f\n", a, a) // 3.12 -- 3.120000  保留六位小数点
	fmt.Println(unsafe.Sizeof(a))  // 4   float32占用4个字节

	var b float64 = 3.12
	fmt.Printf("值:%v--%f\n", b, b) // 3.12--3.120000
	fmt.Println(unsafe.Sizeof(b))  // 8  float64占用八个字节

	//2、 %f 输出float类型 %.2f输出数据保留两位小数
	fmt.Printf("%v-%.2f\n", b, b) //3.12-3.12
	fmt.Printf("%v-%.4f\n", b, b) //3.12-3.1200

	// 64位操作系统中Go语言中浮点默认是float64

	f1 := 3.1415926
	fmt.Printf("%f--%T\n", f1, f1) //3.141593--float64

	//3、GO中科学计数 表示浮点数
	var f2 float32 = 3.14e2       //表示3.14*10的二次方
	fmt.Printf("%v-%T\n", f2, f2) //314-float32
	var f3 float32 = 3.14e-2      //表示3.14/10的二次方
	fmt.Printf("%v-%T\n", f3, f3) //0.0314-float32

	//3、精度丢失问题
	var f4 float64 = 1129.6
	fmt.Println(f4 * 100) //112959.99999999999

	m1 := 8.2
	m2 := 3.8
	fmt.Println(m1 - m2) //4.3999999999999995

	//4、int类型转换成float
	x := 4
	x1 := float64(a)
	fmt.Printf("a类型：%T,b类型：%T\n", x, x1) //a类型：int,b类型：float64

	//5、float类型转换成int
	var x2 float64 = 3.13
	x3 := int(x2)
	fmt.Printf("x2类型：%T,x3类型：%T\n", x2, x3) //x2类型：float64,x3类型：int
}
